home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / blankery / blitzblank / sources / bb.tiles < prev    next >
Text File  |  1993-09-17  |  7KB  |  337 lines

  1. ;BB.Tiles - Blanker-module for BlitzBlank
  2. ;Copyright 1993 by Thomas Boerkel
  3.  
  4. CloseEd
  5. NoCli
  6.  
  7. NEWTYPE.table
  8. r.l
  9. g.l
  10. b.l
  11. End NEWTYPE
  12.  
  13. NEWTYPE.tags
  14. a.l
  15. b
  16. c
  17. d
  18. e
  19. f
  20. End NEWTYPE
  21.  
  22. DEFTYPE.Screen *fs,*myscreen
  23. DEFTYPE.ViewPort *vp
  24. DEFTYPE.RastPort *rp
  25. DEFTYPE.ColorMap *cm
  26. DEFTYPE.NewScreen newscreen
  27. DEFTYPE.Message *msg
  28. DEFTYPE.table tab
  29. DEFTYPE.MsgPort *port
  30. DEFTYPE.tags tags
  31. DEFTYPE.l
  32.  
  33. #SA_Interleaved=#SA_Dummy+$22
  34.  
  35. Select Par$(1)
  36.   Case "BLANK"
  37.     name$="BB.BlankModule"+Chr$(0)
  38.     *port=CreateMsgPort_()
  39.     *port\mp_Node\ln_Name=&name$
  40.     *port\mp_Node\ln_Pri=1
  41.     AddPort_ *port
  42.     SetTaskPri_ FindTask_(0),Val(Par$(8))
  43.     Gosub readconfig
  44.     lib$="intuition.library"+Chr$(0)
  45.     *ibase.IntuitionBase=OpenLibrary_(&lib$,39)
  46.     CloseLibrary_(*ibase)
  47.  
  48.     If *ibase
  49.       v39=1
  50.     Else
  51.       *ibase.IntuitionBase=OpenLibrary_(&lib$,37)
  52.       CloseLibrary_(*ibase)
  53.     EndIf
  54.  
  55.     *fs=*ibase\FirstScreen
  56.  
  57.     left=*fs\LeftEdge
  58.     top=*fs\TopEdge
  59.     width=*fs\Width
  60.     height=*fs\Height
  61.     modeid=GetVPModeID_(*fs\ViewPort)
  62.  
  63.     depth=*fs\BitMap\Depth
  64.     If width<500
  65.       gx=50
  66.       sx=1
  67.     Else
  68.       gx=100
  69.       sx=2
  70.     EndIf
  71.  
  72.     If speed<3
  73.       sx*speed
  74.     EndIf
  75.     If speed=3
  76.       sx*4
  77.     EndIf
  78.  
  79.  
  80.  
  81.     fdummy.q=gx/sx
  82.     If fdummy<>Int(gx/sx)
  83.       gx=Int(fdummy)*sx
  84.     EndIf
  85.     gy=gx*height/width
  86.     fdummy.q=gy/sx
  87.     If fdummy<>Int(gy/sx)
  88.       gy=Int(fdummy)*sx
  89.     EndIf
  90.     ax=width/gx
  91.     ay=height/gy
  92.     sw=(ax+1)*gx
  93.     sh=(ay+1)*gy
  94.  
  95.     If speed<>4
  96.       sy=sx
  97.     Else
  98.       sy=gy
  99.       sx=gx
  100.     EndIf
  101.  
  102.  
  103.     title$="BB.Tile.Screen"+Chr$(0)
  104.     newscreen\LeftEdge=left,top,sw,sh,depth
  105.     newscreen\ViewModes=0,#CUSTOMSCREEN|#SCREENBEHIND,0,&title$
  106.     tags\a=#SA_DisplayID
  107.     tags\b=modeid
  108.     tags\c=0
  109.     If v39
  110.       tags\c=#SA_Interleaved
  111.       tags\d=True
  112.       tags\e=0
  113.     EndIf
  114.     *myscreen=OpenScreenTagList_(newscreen,tags)
  115.     If *myscreen
  116.       *vp=*myscreen\ViewPort
  117.       *rp=*myscreen\RastPort
  118.       *bm=*myscreen\BitMap
  119.       BltBitMap_ *fs\BitMap,0,0,*myscreen\BitMap,0,0,width,height,$C0,$FF,0
  120.  
  121.       If ta=1
  122.         For x=0 To ax
  123.           For y=0 To ay
  124.             ;Box x*gx,y*gy,(x+1)*gx-1,(y+1)*gy-1,1
  125.             SetAPen_ *rp,1
  126.             Move_ *rp,x*gx,y*gy
  127.             Draw_ *rp,(x+1)*gx-1,y*gy
  128.             Draw_ *rp,(x+1)*gx-1,(y+1)*gy-1
  129.             Draw_ *rp,x*gx,(y+1)*gy-1
  130.             Draw_ *rp,x*gx,y*gy
  131.           Next y
  132.         Next x
  133.       EndIf
  134.  
  135.       If ta=2
  136.         For x=0 To ax
  137.           For y=0 To ay
  138.             SetAPen_ *rp,2
  139.             Move_ *rp,x*gx,(y+1)*gy-1
  140.             Draw_ *rp,x*gx,y*gy
  141.             Draw_ *rp,(x+1)*gx-1,y*gy
  142.             SetAPen_ *rp,1
  143.             Move_ *rp,x*gx,(y+1)*gy-1
  144.             Draw_ *rp,(x+1)*gx-1,(y+1)*gy-1
  145.             Draw_ *rp,(x+1)*gx-1,y*gy
  146.           Next y
  147.         Next x
  148.       EndIf
  149.  
  150.       *cm=*fs\ViewPort\ColorMap
  151.  
  152.  
  153.       For i=0 To 2^depth
  154.         If v39
  155.           GetRGB32_ *cm,i,1,tab
  156.           SetRGB32_ *vp,i,tab\r,tab\g,tab\b
  157.         Else
  158.           c=GetRGB4_(*cm,i)
  159.           SetRGB4_ *vp,i,(c LSR 8) AND 15,(c LSR 4) AND 15,c AND 15
  160.         EndIf
  161.  
  162.       Next i
  163.       ScreenToFront_ *myscreen
  164.  
  165.  
  166.       Dim f(ax+1,ay+1)
  167.       Dim dx(4),dy(4)
  168.       dx(0)=0:dy(0)=-1
  169.       dx(1)=1:dy(1)=0
  170.       dx(2)=0:dy(2)=1
  171.       dx(3)=-1:dy(3)=0
  172.  
  173.       mx=Rnd(ax-1)+1
  174.       my=Rnd(ay-1)+1
  175.       br=-1
  176.  
  177.       VWait
  178.       SetAPen_ *rp,0
  179.       RectFill_ *rp,mx*gx,my*gy,(mx+1)*gx-1,(my+1)*gy-1
  180.  
  181.       Repeat
  182.         z=0
  183.         Repeat
  184.           r=Rnd(4)
  185.         Until mx+dx(r)>=0 AND mx+dx(r)<=ax AND my+dy(r)>=0 AND my+dy(r)<=ay AND r<>br
  186.         br=r-2
  187.         If br<0 Then br=br+4
  188.         pos=(my+1)*gy+50
  189.         Repeat
  190.  
  191.           Select r
  192.             Case 0
  193.               a=mx*gx:b=(my-1)*gy+z:c=gx:d=gy:e=a:f=b+sy
  194.               gr=gy:s=sy
  195.               g=a:h=b:i=g+gx-1:j=h+sy-1
  196.             Case 2
  197.               gr=gy:s=sy
  198.               a=mx*gx:b=(my+1)*gy-z:c=gx:d=gy:e=a:f=b-sy
  199.               g=a:h=f+gy:i=g+gx-1:j=h+sy-1
  200.             Case 1
  201.               a=(mx+1)*gx-z:b=my*gy:c=gx:d=gy:e=a-sx:f=b
  202.               g=e+gx:h=b:i=g+sx-1:j=h+gy-1
  203.               gr=gx:s=sx
  204.             Case 3
  205.               gr=gx:s=sx
  206.               a=(mx-1)*gx+z:b=my*gy:c=gx:d=gy:e=a+sx:f=b
  207.               g=a:h=b:i=g+sx-1:j=h+gy-1
  208.           End Select
  209.           If speed<>4
  210.             VWait
  211.           Else
  212.             VWait 2
  213.           EndIf
  214.           If my<3
  215.             Repeat
  216.             Until VBeamPos_()>pos
  217.           EndIf
  218.           BltBitMap_ *bm,a,b,*bm,e,f,c,d,$C0,$ff,0
  219.           RectFill_ *rp,g,h,i,j
  220.           *msg=GetMsg_(*port)
  221.           z+s
  222.         Until z>=gr OR *msg
  223.         mx=mx+dx(r)
  224.         my=my+dy(r)
  225.       Until *msg
  226.  
  227.       CloseScreen_ *myscreen
  228.     EndIf
  229.     RemPort_ *port
  230.     DeleteMsgPort_ *port
  231.  
  232.   Case "INFO"
  233.     title$="Tiles"+Chr$(0)
  234.     reqtext$="Tiles - Module for BlitzBlank"+Chr$(10)
  235.     reqtext$+Chr$(169)+" 1993 by Thomas Brkel"+Chr$(10)+Chr$(10)
  236.     reqtext$+"Your actual screen will turn into a puzzle."+Chr$(10)+Chr$(10)
  237.     reqtext$+"Choose border and speed in the config-window."+Chr$(0)
  238.     gadget$="OK"+Chr$(0)
  239.     easy.EasyStruct\es_StructSize=SizeOf.EasyStruct
  240.     easy\es_Title=&title$
  241.     easy\es_TextFormat=&reqtext$
  242.     easy\es_GadgetFormat=&gadget$
  243.     EasyRequestArgs_ 0,easy,0,0
  244.   Case "CONFIG"
  245.     *myscreen=LockPubScreen_(0)
  246.     width=*myscreen\Width
  247.     height=*myscreen\Height
  248.     Gosub readconfig
  249.     WbToScreen 0
  250.     BorderPens 2,1
  251.     ButtonGroup 1
  252.     TextGadget 0,25,20,512,0,"  No Border  "
  253.     TextGadget 0,25,40,512,1,"Simple Border"
  254.     TextGadget 0,25,60,512,2,"  3D Border  "
  255.     Toggle 0,ta,On
  256.     ButtonGroup 2
  257.     TextGadget 0,25,90,512,3," Speed: Slow "
  258.     TextGadget 0,25,110,512,4," Speed: Norm "
  259.     TextGadget 0,25,130,512,5," Speed: Fast "
  260.     TextGadget 0,25,150,512,6," Speed: !?%& "
  261.     Toggle 0,speed+2,On
  262.     Window 0,width/2-80,height/2-85,160,170,$100e,"Tiles",1,2,0
  263.     Repeat
  264.       ev=WaitEvent
  265.     Until ev=$200
  266.     ta=ButtonId(0,1)
  267.     speed=ButtonId(0,2)-2
  268.     Free Window 0
  269.     Gosub writeconfig
  270.     UnlockPubScreen_ 0,*myscreen
  271. End Select
  272.  
  273. End
  274.  
  275. .readconfig
  276. path$=Par$(9)
  277. For i=10 To NumPars
  278.   path$=path$+" "+Par$(i)
  279. Next i
  280. If ReadFile(0,path$+"BB.Modules.config")
  281.   FileInput 0
  282.   While NOT Eof(0)
  283.     If Edit$(100)="*** Tiles ***"
  284.       ta=Edit(5)
  285.       speed=Edit(5)
  286.     EndIf
  287.   Wend
  288.   DefaultInput
  289.   CloseFile 0
  290. EndIf
  291. Gosub checkval
  292. Return
  293.  
  294.  
  295. .writeconfig
  296. Gosub checkval
  297. If ReadFile(0,path$+"BB.Modules.config")
  298.   If WriteFile(1,path$+"BB.Modules.temp")
  299.     FileInput 0
  300.     FileOutput 1
  301.     While NOT Eof(0)
  302.       f$=Edit$(100)
  303.       If f$="*** Tiles ***"
  304.         Repeat
  305.           f2$=Edit$(100)
  306.         Until Eof(0) OR Left$(f2$,3)="***"
  307.         If NOT Eof(0) Then NPrint f2$
  308.       Else
  309.         NPrint f$
  310.       EndIf
  311.     Wend
  312.     CloseFile 1
  313.   EndIf
  314.   CloseFile 0
  315. EndIf
  316. KillFile path$+"BB.Modules.config"
  317. f$=path$+"BB.Modules.temp"+Chr$(0)
  318. f2$=path$+"BB.Modules.config"+Chr$(0)
  319. Rename_ &f$,&f2$
  320. If OpenFile(0,path$+"BB.Modules.config")
  321.   FileOutput 0
  322.   FileSeek 0,Lof(0)
  323.   NPrint "*** Tiles ***"
  324.   NPrint ta
  325.   NPrint speed
  326.   CloseFile 0
  327. EndIf
  328. Return
  329.  
  330. .checkval
  331. If ta<0 Then ta=0
  332. If ta>2 Then ta=2
  333. If speed<1 Then speed=1
  334. If speed>4 Then speed=4
  335. Return
  336.  
  337.